package dominioEntity;
import java.io.Serializable;
import java.sql.Date;
import java.util.ArrayList;
import java.util.List;

import javax.persistence.CascadeType;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.OneToMany;

import org.hibernate.annotations.LazyCollection;
import org.hibernate.annotations.LazyCollectionOption;

import dominioTO.ItemOrdenCompraTO;
import dominioTO.OrdenCompraProveedorTO;

//OrdenCompraProveedor lado Servidor DAO (Persistencia)
@Entity
public class OrdenCompraProveedor implements Serializable{
	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;
	
	@Id
	@GeneratedValue( strategy = GenerationType.AUTO)
	private Integer idOC;
	private Date fechaEmision;
	
	@LazyCollection(LazyCollectionOption.FALSE)
	@OneToMany(cascade=CascadeType.ALL)
	@JoinColumn(name = "IdOC_id")
	private List <ItemOrdenCompra> itemsOC;
	
	@LazyCollection(LazyCollectionOption.FALSE)
	@ManyToOne(cascade = CascadeType.ALL)
	@JoinColumn(name = "proveedor_id")
	private Proveedor proveedor;
	
	@LazyCollection(LazyCollectionOption.FALSE)
	@OneToMany(cascade = CascadeType.ALL)
	@JoinColumn(name = "Id_OrdenCompraProv")
	private List<ItemCotizacion> itemCotizacion;
	
	
	
	//Getters & Setters
	
	
	public Integer getIdOC() {
		return idOC;
	}
	public List<ItemCotizacion> getItemCotizacion() {
		return itemCotizacion;
	}
	public void setItemCotizacion(List<ItemCotizacion> itemCotizacion) {
		this.itemCotizacion = itemCotizacion;
	}
	
	public void setIdOC(Integer idOC) {
		this.idOC = idOC;
	}
	public Date getFechaEmision() {
		return fechaEmision;
	}
	public void setFechaEmision(Date fechaEmision) {
		this.fechaEmision = fechaEmision;
	}
	public List<ItemOrdenCompra> getItemsOC() {
		return itemsOC;
	}
	public void setItemsOC(List<ItemOrdenCompra> itemsOC) {
		this.itemsOC = itemsOC;
	}
	public Proveedor getProveedor() {
		return proveedor;
	}
	public void setProveedor(Proveedor proveedor) {
		this.proveedor = proveedor;
	}
	
	
	
	
	public void agregarItem(ItemOrdenCompra item)
	{
		if(itemsOC==null)
		{
			itemsOC = new ArrayList<ItemOrdenCompra>();
		}
		this.itemsOC.add(item);
	}
	public void agregarItemCotizacion(ItemCotizacion item)
	{
		if(itemCotizacion==null)
		{
			itemCotizacion = new ArrayList<ItemCotizacion>();
		}
		this.itemCotizacion.add(item);
	}
	
	public OrdenCompraProveedorTO getDTO()
	{
		OrdenCompraProveedorTO dto = new OrdenCompraProveedorTO();
		dto.setIdOC(idOC);
		dto.setFechaEmision(fechaEmision);
		dto.setProveedor(proveedor.getDTO());
		List<ItemOrdenCompraTO> itemTO = new ArrayList<ItemOrdenCompraTO>();
		if(itemsOC!=null )
		{
			for(ItemOrdenCompra item:itemsOC)
			{
				itemTO.add(item.getDTO());
			}
		}
		dto.setItemsOC(itemTO);
		return dto;		
	}
	@Override
	public String toString() {
		return "OrdenCompraProveedor [idOC=" + idOC + ", fechaEmision="
				+ fechaEmision + ", itemsOC=" + itemsOC + ", proveedor="
				+ proveedor + "]";
	}

	
	
	
	
}
